#ifndef _bmp_h
#define _bmp_h

#include <stdio.h>

#define UINT unsigned short
#define DWORD unsigned int
#define LONG unsigned int
#define WORD unsigned short
// 第一部分: BMP文件头（BITMAPFILEHEADER） - 14字节
struct tagBITMAPFILEHEADER
{
    WORD bfType;      // (2字节): 用于标识文件类型，BMP文件通常是"BM"。
    DWORD bfSize;     // (4字节): 文件大小，以字节为单位。
    WORD bfReserved1; // (各2字节): 保留字段，通常设置为0。
    WORD bfReserved2; // (各2字节): 保留字段，通常设置为0。
    DWORD bfOffBits;  // (4字节): 从文件头到像素数据的偏移量，以字节为单位。
} __attribute__((packed));

// 位图信息头（BITMAPINFOHEADER） - 40字节

struct tagBITMAPINFOHEADER
{
    DWORD biSize;        //   (4字节): 位图信息头的大小，通常为40。
    LONG biWidth;        //   (4字节): 图像的宽度，以像素为单位。
    LONG biHeight;       //  (4字节): 图像的高度，以像素为单位。
    WORD biPlanes;       //  (2字节): 颜色平面数，通常为1。
    WORD biBitCount;     // (2字节): 每个像素的位数，如24位颜色。
    DWORD biCompression; // (4字节): 压缩类型，0表示未压缩。
    DWORD biSizeImage;   //(4字节) : 像素数据的大小，以字节为单位。
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter; // (各4字节): 水平和垂直分辨率，以像素每米为单位。
    DWORD biClrUsed;      // (4字节): 用于颜色的调色板条目的数量。
    DWORD biClrImportant; // (4字节): 重要的颜色数。
} __attribute__((packed));

#endif